function Person(name, age) {
  this.name = name
  this.age = age
  // 方法挂到这，借用构造函数继承的方式，也能继承到这个方法
  // !但是，咱的方法往往不会挂到这儿，因为挂到这儿会存在内存空间浪费的问题
  /* this.say = function() {
    console.log(1)
  } */
}

// 方法一般挂载到构造函数的原型上面，这样呢，就不存在内存空间浪费的问题啦
Person.prototype.say = function() {
  console.log(1)
}

/* const p1 = new Person('a', 18)
const p2 = new Person('b', 19)
console.log(p1.say === p2.say) */

function Star(name, age, money) {
  // 调用 Person 的同时，并把 Person 中的 this 改成了这儿的 this（Star 的实例）
  // !#1 借用/盗用构造函数继承
  // !#2 借用构造函数继承的问题：不能父类原型上的方法
  Person.call(this, name, age)
  // Person.apply(this, [name, age])
  this.money = money
}

const r = new Star('wsc', 38, 100000)
r.say()